import type { Equal } from "@type-challenges/utils";

export type Includes<T extends any[], K> = T extends [infer X, ...infer P]
  ? Equal<X, K> extends true
    ? true
    : Includes<P, K>
  : false;

// 1. 递归调用
// 2. ===>>>  Equal<X, K> extends true 判断 X与 K 是不是相等
type IsSameType<T, K> = T extends K ? true : false;
type Same1 = IsSameType<"1", 1>;
type Same2 = Equal<"1", 1>;

type Same3 = IsSameType<true, boolean>; // true => 答案有误 true 和 boolean 类型不相同 应该是 false才对，所以 IsSameType写法是有问题的
type Same4 = Equal<true, boolean>; // false 这才是会对的 Equal判断两个类型是否一样

// 笔记
type F1 = [boolean];
const F1Value: F1 = [true];
// const value: F1 = [false, 2, 3, 5, 6, 7];
type F2 = false;
type E1 = Includes<F1, F2>;
const v: E1 = false;
